#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//#include <cstdio>
//#include <vector>
//
//using namespace std;
//
//const int N = 2e5 + 10;
//typedef pair<int, int> PII;
//int id[N], dp[N];
//vector<PII> edg[N];
//int t;
//
//void dfs(int u)
//{
//	for (auto p : edg[u])
//	{
//		if (dp[p.first] == 0)
//		{
//			dp[p.first] = dp[u] + (p.second < id[u]);
//			id[p.first] = p.second;
//			dfs(p.first);
//		}
//	}
//}
//int main()
//{
//	cin >> t;
//
//	while (t--)
//	{
//		int n;
//		cin >> n;
//
//		for (int i = 1; i <= n; i++) id[i] = dp[i] = 0, edg[i].clear();
//
//		for (int i = 1; i < n; i++)
//		{
//			int u, v;
//			cin >> u >> v;
//			edg[u].push_back({ v, i });
//			edg[v].push_back({ u, i });
//		}
//
//		dp[1] = 1;
//		dfs(1);
//		int ans = 0;
//		for (int i = 0; i <= n; i++)
//			ans = max(ans, dp[i]);
//
//		cout << ans << endl;
//	}
//	return 0;
//}
//#include <iostream>
//#include <cstdio>
//#include <vector>
//using namespace std;
//const int N = 2e5 + 5;
//int dp[N], id[N];
//vector<pair<int, int>> edg[N];
//void dfs(int u) {
//    for (auto it : edg[u]) {
//        if (dp[it.first] == 0) {
//            dp[it.first] = dp[u] + (it.second <= id[u]);
//            id[it.first] = it.second;
//            dfs(it.first);
//        }
//    }
//}
//void tc() {
//    int n;
//    cin >> n;
//    for (int i = 1; i <= n; i++) dp[i] = id[i] = 0, edg[i].clear();
//    for (int i = 1; i < n; i++) {
//        int u, v;
//        cin >> u >> v;
//        edg[u].push_back({ v,i });
//        edg[v].push_back({ u,i });
//    }
//    dp[1] = 1;
//    dfs(1);
//    int ans = 0;
//    for (int i = 1; i <= n; i++) ans = max(ans, dp[i]);
//    cout << ans << '\n';
//}
//int main()
//{
//    ios_base::sync_with_stdio(false);
//    int t;
//    cin >> t;
//    while (t--)
//        tc();
//    return 0;
//}
//#include <iostream>
//#include <cstdio>
//
//using namespace std;
//const int N = 2e5 + 10;
//typedef pair<int, int> PII;
//int a[N], b[N];
//PII ab[N];
//int t;
//int main()
//{
//	cin >> t;
//
//	while (t--)
//	{
//		int n;
//		cin >> n;
//		for (int i = 0; i < n; i++)
//			cin >> a[i];
//
//		for (int i = 0; i < n; i++)
//			cin >> b[i];
//		int ma;
//		int i;
//		for (i = 0,ma = 0; i < n; i++)
//			if(a[i] <= 2 * n)
//				ab[ma++] = { a[i], b[i] };
//		int cnt = 0;
//		for (int i = 0; i < ma - 1; i++)
//			for (int j = i + 1; j < ma; j++)
//				if (ab[i].first * ab[j].first == ab[i].second + ab[j].second) cnt++;
//
//		cout << cnt << endl;
//	}
//	return 0;
//}

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N = 2e5 + 10;
typedef pair<int, int> PII;
vector<PII> edg[N];
int dp[N];
int id[N];
void dfs(int u)
{
	for (auto p : edg[u])
	{
		if (!dp[p.first])
		{
			id[p.first] = p.second;
			
			dp[p.first] = dp[u] + (p.second < id[u]);

			dfs(p.first);
		}
	}
}
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n;
		cin >> n;
		for (int i = 0; i <= n; i++)
			id[i] = 0, dp[i] = 0, edg[i].clear();
		for (int i = 0; i < n - 1; i++)
		{
			int u, v;
			cin >> u >> v;
			edg[u].push_back({ v, i });
			edg[v].push_back({ u, i });
		}

		dp[1] = 1;
		
		dfs(1);
		int ans = 0;

		for (int i = 1; i <= n; i++)
			ans = max(ans, dp[i]);
		cout << ans << endl;
	}

	return 0;
}